package spark

import org.apache.spark.rdd.RDD
import org.apache.spark.util.LongAccumulator
import org.apache.spark.{SparkConf, SparkContext}

object SimpleAcc {
  def main(args: Array[String]): Unit = {
    val conf =new SparkConf().setMaster("local[*]").setAppName(SimpleAcc.getClass.getSimpleName)
    val sc=new SparkContext(conf)
    val dataRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4), 2)
    //如果不使用累加器，因为数据在两个分区，所以数据是在两个executor中累加，且累加的数值结果没有返回driver，driver中的sum仍然是0
    var sum: Int = 0
    dataRDD.foreach(i=>sum=sum+i)
    println("sum="+sum)
    //使用累加器来实现不同结点的值的相加
    val accumulator: LongAccumulator = sc.longAccumulator
    dataRDD.foreach{
      case i=>{
        accumulator.add(i)
      }
    }
    println("sum="+accumulator.value)
    //
  }
}
